<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>JS  Functions</title>
    <script>

        /*
        全局对象是预定义的对象，作为 JavaScript 的全局函数和全局属性的占位符。通过使用全局对象，
        可以访问所有其他所有预定义的对象、函数和属性。全局对象不是任何对象的属性，所以它没有名称。
        在顶层 JavaScript 代码中，可以用关键字 this 引用全局对象。但通常不必用这种方式引用全局对象，
        因为全局对象是作用域链的头，这意味着所有非限定性的变量和函数名都会作为该对象的属性来查询。
        例如，当JavaScript 代码引用 parseInt() 函数时，它引用的是全局对象的 parseInt 属性。
        全局对象是作用域链的头，还意味着在顶层 JavaScript 代码中声明的所有变量都将成为全局对象的属性。
        全局对象只是一个对象，而不是类。既没有构造函数，也无法实例化一个新的全局对象。
        在 JavaScript 代码嵌入一个特殊环境中时，全局对象通常具有环境特定的属性。实际上
        ，ECMAScript 标准没有规定全局对象的类型，JavaScript 的实现或嵌入的 JavaScript 都可以把任意类型的对象作为全局对象，
        只要该对象定义了这里列出的基本属性和函数。例如，在允许通过 LiveConnect 或相关的技术来脚本化 Java 的 JavaScript 实现中，
        全局对象被赋予了这里列出的 java 和 Package 属性以及 getClass() 方法。而在客户端 JavaScript 中，全局对象就是 Window 对象，
        表示允许 JavaScript 代码的 Web 浏览器窗口。
        */ 
        function testVariables(){
            var variables = "";
            for (var name  in  this){
                variables += name + "<br/>"
            }
            document.write(variables); // 这里有内建的 Js 对象
        }
       
    </script>
</head>
<body>
    <button onclick="testVariables()">测试所有的变量</button>
</body>
</html>